class Solution {
public:
    uint32_t reverseBits(uint32_t n) {
        // 下面是某网友题解
        int ret = 0;
        for(int i = 0; i < 32; i++)
        {
            // 每次取出n的最低位，然后按位或到res的最高位上
            ret = (ret << 1) | (n & 1);
            n = n >> 1; 
        }
        return ret;

        // 下面是自己的写法
        // for(int i = 0, j = 31; i <= 15 && j >= 16; i++, j--)
        // {
        //     if(((n >> i) & 1) != ((n >> j) & 1))
        //     {
        //         if(((n >> i) & 1) == 1 && ((n >> j) & 1) == 0)
        //         {
        //             n &= ~(1 << i);
        //             n |= (1 << j);
        //         }
        //         else/* if(((n >> i) & 1) == 0 && ((n >> j) & 1) == 1)*/
        //         {
        //             n |= (1 << i);
        //             n &= ~(1 << j);
        //         }
        //     }
        // }
        // return n;
    }
};